package com.global.dao;

import java.util.List;

import com.global.model.DataSourceXColumn;
import com.global.model.Grid;
import com.global.model.GridColumn;

public interface GridColumnDao extends GenericDao<GridColumn, Long> {

	/**
	 * 保存GridColumn配置信息
	 * @param gridColumn
	 * @return 持久化的GridColumn配置信息
	 */
	GridColumn saveGridColumn(GridColumn gridColumn);
	
	/**
	 * 批量保存GridColumn配置信息
	 * @param gridColumn
	 * @return true 表示保存成功
	 */
	boolean saveBatchGridColumns(List<GridColumn> gridColumnList);
	
	/**
	 * 通过label在指定的Grid中找到唯一的GridColumn
	 * @param grid
	 * @param label
	 * @return GridColumn
	 */
	GridColumn getGridColumn(Grid grid, String label);
	
	/**
	 * 通过数据源在指定的Grid中找到唯一的GridColumn
	 * @param grid
	 * @param label
	 * @return GridColumn
	 */	
	GridColumn getGridColumn(Grid grid, DataSourceXColumn dataSourceXColumn);
	
	/**
	 * 从DB中检索出某个Grid中的GridColumn清单（包括隐藏的），
	 * <br/>并且<span style="color:red">按照显示顺序进行升序（在配置实体时，设置了Comparator）排列</span>
	 * @return List
	 */
	List<GridColumn> getAllGridColumnList(Grid grid);
	
	/**
	 * 从DB中检索出某个Grid中的GridColumn清单（不包括隐藏的），
	 * <br/>并且<span style="color:red">按照显示顺序进行升序（在配置实体时，设置了Comparator）排列</span>
	 * @return List
	 */
	List<GridColumn> getDispalyGridColumnList(Grid grid);
	
    /**
     * 从DB中获取绑定了指定的数据源字段的GridColumn清单
	 * @param dataSourceXColumn 被绑定了数据源字段
     * @return
     */
	List<GridColumn> getGridColumnList(DataSourceXColumn dataSourceXColumn);
	
	/**
	 * 从DB中获取绑定了指定数据源字段的GridColumn清单
	 * @param dataSourceXColumnList 被绑定的数据源字段清单
	 * @return
	 */
	public List<GridColumn> getGridColumnList(List<DataSourceXColumn> dataSourceXColumnList);
	
	/**
	 * 删除GridColumn
	 * @param gridColumn {@linkplain GridColumn}
	 */
	public void deleteGridColumn(GridColumn gridColumn);
	
	/**
	 * 删除GridColumn
	 * @param grid {@linkplain Grid}
	 * @param label GridColumn显示名称
	 */
	void deleteGridColumn(Grid grid, String label);
	
	/**
	 * 删除GridColumn
	 * @param grid {@linkplain Grid}
	 * @param dataSourceXColumn 数据源字段，参考 {@linkplain DataSourceXColumn}
	 */
	void deleteGridColumn(Grid grid, DataSourceXColumn dataSourceXColumn);
}
